package com.wise.webservicecxf.server.impl;

import com.wise.webservicecxf.domain.User;
import com.wise.webservicecxf.server.UserService;

import javax.jws.WebService;
import java.util.*;

/**
 * 备注说明：接口实现类名称前的注解targetNamespace是当前类实现接口所在包名称的反序（PS：加上反斜线），
 * endpointInterface是当前需要实现接口的全称；@WebService(targetNamespace="http://service.webservicedemo.dbgo.com/",endpointInterface = "com.dbgo.webservicedemo.service.UserService")
 *
 * 解释：如若不这样会在进行客户端调用的时候回报错：No operation was found with the name {http://impl.service.demo.paybay.cn/}getUser.
 * 那么原因就是：在CXF发布服务的时候，发布的是业务类(UserServiceImpl.java)，那么默认的命名空间就会是业务类所在包（路径），而对外界暴露的则是接口类(UserService.java)，那么对于客户端调用的时侯，需要按照接口类所在路径进行命名空间的定义。
 * 所以在发布之前我们要在业务类(UserServiceImpl.java)上增加注解，指定命名空间，然后再进行发布，
 * @See：https://www.cnblogs.com/fuxin41/p/6289162.html
 */
@WebService(targetNamespace = "http://server.webservicecxf.wise.com/",
        endpointInterface = "com.wise.webservicecxf.server.UserService")
public class UserServiceImpl implements UserService {
    private Map<String,User> userMap = new HashMap<String,User>();

    public UserServiceImpl() {
        System.out.println("向实体类插入数据");
        User user = new User();
        user.setUserId("411001");
        user.setUsername("zhansan");
        user.setAge("20");
        user.setUpdateTime(new Date());
        userMap.put(user.getUserId(), user);

        user = new User();
        user.setUserId("411002");
        user.setUsername("lisi");
        user.setAge("30");
        user.setUpdateTime(new Date());
        userMap.put(user.getUserId(), user);

        user = new User();
        user.setUserId("411003");
        user.setUsername("wangwu");
        user.setAge("40");
        user.setUpdateTime(new Date());
        userMap.put(user.getUserId(), user);
    }

    @Override
    public String getName(String userId) {
        return "liyd-"+userId;
    }

    @Override
    public User getUser(String userId) {
        User user = userMap.get(userId);
        return user;
    }

    @Override
    public ArrayList<User> getAllUser() {
        ArrayList<User> users = new ArrayList<>();
        userMap.forEach((k,v)->users.add(v));
        return users;
    }
}
